Network Working Group Deborah Estrin INTERNET DRAFT USC Tony Li cisco Systems Yakov Rekhter T.J. Watson Research Center, IBM Corp. 10/10/92 Revision 0.93 Expiration Date: 04/10/92 Source Demand Routing Protocol Specification (Version 1). Status of this Memo This document defines an inter-autonomous system routing protocol for the Internet. This document specifies an IAB standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "IAB Official Protocol Standards" for the standardization state and status of this protocol. Distribution of this document is unlimited. This document is an Internet Draft. Internet Drafts are working documents of the Internet Engineering Task Force (IETF), its Areas, and its Working Groups. Note that other groups may also distribute working documents as Internet Drafts. Internet Drafts are draft documents valid for a maximum of six months. Internet Drafts may be updated, replaced, or obsoleted by other documents at any time. It is not appropriate to use Internet Drafts as reference material or to cite them other than as a "working draft" or "work in progress". 1 Overview The purpose of SDRP is to support source-initiated selection of inter-domain routes to complement the intermediate-node route selection provided by BGP ([1], [2], [3]) or IDRP ([4]). This document refers to such source-initiated routes as "SDRP routes". The protocol makes minimal assumptions about the distribution and acquisition of routing information needed to construct the SDRP routes. These minimal assumptions are believed to be sufficient for the existing Internet. Future versions of the protocol will extend capabilities in this area and others in a largely backward-compatible manner. This version of the protocol sends all packets with the complete SDRP route in the SDRP header. Future versions will address route setup and other enhancements and optimizations. 2 Model of operations An Internet can be viewed as a collection of routing domains interconnected by means of common Layer 2 (Data Link Layer) subnetworks, and Border Routers (BRs) attached to these subnetworks. A BR belongs to only one domain. A pair of BRs, each belonging to a different domain, but attached to a common subnetwork, form an inter-domain connection. By definition, packets that traverse multiple domains must traverse BRs of these domains. Note that a single physical router may act as multiple BRs for the purposes of this model. A pair of domains is said to be adjacent if there is at least one pair of BRs, one in each domain, that form an inter-domain connection. Each domain has a globally unique identifier, called a Domain Identifier (DI). All the BRs within a domain need to know the DI assigned to the domain. Management of the DI space is outside the scope of this document. This document assumes that Autonomous System (AS) numbers are used as DIs. Further, a domain path (or simply path) in this document refers to a list of DIs as taken from a BGP AS path or an IDRP RD path. We refer to a route as the combination of a network address and a domain path. The network addresses are represented by NLRI (Network Layer Reachability Information) as described in [3]. This document assumes that routing domains are congruent to the autonomous systems. Thus, within the content of this document terms autonomous system and routing domain can be used interchangeably. An SDRP route is defined as a sequence of domains, syntactically expressed as a sequence of DIs (autonomous system numbers). Each SDRP route has a flag associated with it indicating whether it is strict or loose. A strict SDRP route means that any pair of consecutive DI entries in the SDRP route must represent a pair of adjacent domains. A loose SDRP route may also allow a pair of consecutive DI entries in the SDRP route to be separated by other domains that are not listed in the route. It is assumed that a BR participates in the intra-domain routing protocol(s) (IGPs) of the domain to which the BR belongs. Thus, a BR may forward a packet to any other BR in its own domain using intra- domain routing procedures. Forwarding a packet between two BRs that form an inter-domain connection requires neither the intra-domain nor the inter-domain routing procedures (an inter-domain connection is a common Layer 2 subnetwork). While SDRP does not require that all domains have a common network layer protocol, all the BRs across the domains spanning a given SDRP route are required to support a common network layer. This document specifies SDRP operations when that common network layer protocol is IP ([5]). While this document requires all the BRs to support IP, the document does not preclude a BR from additionally supporting other network layer protocols as well (e.g., CLNP, IPX, AppleTalk). If a BR supports multiple network layers, then for the purposes of this model, the BR must maintain multiple Forwarding Information Bases (FIBs), one per network layer. Forwarding an IP packet along an SDRP route is accomplished by encapsulating the packet in an SDRP packet. An SDRP packet consists of the SDRP header followed by the SDRP data. The SDRP header carries the SDRP route constructed by the domain that originated the SDRP packet. The SDRP data carries the original packet that the source domain decided to forward via SDRP. An SDRP packet is carried across domains as the data portion of an IP packet with protocol number 42. This document refers to the IP header of a packet that carries an SDRP packet as the delivery IP header (or just the delivery header). This document refers to the packet carried as SDRP data as the payload packet, and the network layer header of the payload packet is the payload header. Thus, an SDRP Packet can be represented as follows: +-------------------+--------------+------------------- | Delivery header | SDRP header | SDRP data | (IP header) | | (Payload packet) +-------------------+--------------+-------------------- Each SDRP route may have an MTU associated with it. An MTU of an SDRP route is defined as the maximum length of the payload packet that can be carried without fragmentation of an SDRP packet. Procedures for MTU discovery are specified in Section 9. It is assumed that a BR participates in either BGP or IDRP. A BR participating in SDRP augments its FIBs with a D-FIB that contains routes to domains. A route to a domain is a tuple that consists of a destination domain (expressed as a DI), and the network layer address of the next-hop BR. D-FIBs are constructed based on the information obtained from either BGP, IDRP, or configuration information. An SDRP packet is forwarded across multiple domains by utilizing the forwarding databases (both FIBs and D-FIBs) maintained by the BRs. The operational status of SDRP routes is monitored via passive (Error Reporting) and active (Route Probing) mechanisms. The Error Reporting mechanism provides the originator of the SDRP route with a failure notification. The Probing mechanism provides the originator of the SDRP route with confirmation of a route's feasibility. 3 SDRP Packet format The total length of an SDRP packet (header plus data) can be determined >from the information carried in the delivery IP header. The length of the payload packet can be determined from the total length of an SDRP packet and the length of its SDRP Header. The following describes the format of an SDRP packet. For a data packet: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ver |S|P|D| | BR Hop Count |SourceProtoType| Payload Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Route Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Prefix | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PrefixLength |SrcRouteLength | NextDomainPtr | Source Route ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload .... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ For a control packet: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ver |S|P|D| | Notification |SourceProtoType| Payload Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Route Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Target Border Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Prefix | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PrefixLength |SrcRouteLength | NextDomainPtr | Source Route ... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload .... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version and Flags (1 octet) The SDRP version number and control flags are coded in the first octet. Bit 0 is the most significant bit, bit 7 is the least significant bit. Version (bits 0 though 2) The first three bits contain the Version field indicating the version number of the protocol. The value of this field is set to 1. Flags (bits 3 through 7) Loose/Strict Source Route (bit 3) The Loose/Strict Source Route indicator is used when making a forwarding decision (see Section 5.2). If this bit is set to 1, it indicates a Strict Source Route. If this bit is set to 0, it indicates a Loose Source Route. Probe Indicator (bit 4) The Probe Indicator is used by the originator of the route to request verification of the route's feasibility (see Sections 4 and 7.1). If this bit is set to 1, it indicates that the originator is probing the route. Data packet/Control packet (bit 5) If the bit is set to 1, then the packet carries data. Otherwise, the packet carries control information. The rest of the Flags field is transmitted as zero, and should be ignored on receipt. BR Hop Count (1 octet) This field is present only in data packets. The BR Hop Count field carries the maximum number of BRs an SDRP data packet may traverse. It is decremented by 1 as an SDRP data packet traverses a BR. Once the BR Hop Count field reaches the value of 0, the BR should discard the data packet and generate a control packet (see Section 5.2.4). Notification Code (1 octet) This field is present only in control packets. This document defines the following values for the Notification Code: 1 - No Route Available 2 - Strict Source Route Failed 3 - Transit Policy Violation 4 - BR Hop Count Exceeded 5 - Probe Completed 6 - Unimplemented SDRP version Source Route Protocol Type (1 octet) The Source Route Protocol Type fields indicates the type of Domain Identifiers (DIs) that appear in the source route. The value 1 in this field indicates that the DIs are Internet Autonomous System numbers. Payload Protocol Type (1 octet) The Payload Protocol Type field indicates the protocol type of the payload. If the payload is an IP datagram, then this field should contain the value 1. Source Route Identifier (4 octets) The BR that originates the SDRP packet should insert a 32 bit value in this field which will serve as an identifier for the source route. This value needs to be unique only in the context of the originating BR. Target Border Router (4 octets) This field is present only in control packets. The Target Border Router contains one of the IP addresses of the BR originating the SDRP packet that triggered the control packet to be returned. Reserved (3 octets) This field is reserved for future use. Prefix (4 octets) The Prefix field contains an IP address prefix. Only the number of bits specified in the Prefix Length are significant. The Prefix field is used to prevent routing loops when using BGP or IDRP to route to the next AS in a loose source route (see Section 4). Prefix Length (1 octet) The Prefix Length field indicates the length in bits of the IP address prefix. A length of zero indicates a prefix that matches all IP addresses. Source Route Length (1 octet) The Source Route Length field indicates the length in octets of the domain level source route carried in the SDRP Header. Next Domain Pointer (1 octet) The Next Domain Pointer field indicates the offset of the high-order byte of the next domain identifier along the route that the packet has to be forwarded. This offset is relative to the start of the Source Route field; so if the value of the Next Domain Pointer field equals the value of the Source Route Length field, then the entire source route has been completed. All other source routes are said to be incomplete. Source Route (variable) Contains a sequence of domain identifiers (expressed as Autonomous System numbers) that determines the sequence of domains to be traversed. Each autonomous system is encoded as 2 octets. Payload (variable) The Payload field carries the datagram originated by the end- system within the domain that constructed the SDRP packet. The Payload field forms the data portion of the SDRP packet. In a control packet this field may be empty or may carry the payload header of the packet that triggered the control message (see 5.2.5). Note that there is no padding between the Source Route and the Payload, and that the Payload may start at any arbitrary octet boundary. 4 Originating SDRP Data packets This document assumes that a BR that originates SDRP packets is preconfigured with a set of SDRP routes. Procedures for constructing these routes are outside the scope of this document. It is assumed that a BR has sufficient information to ascertain whether an IP datagram received by the BR was originated by a host within the domain the BR belongs to. Procedures for acquiring this information are outside of the scope of this document. When a BR receives an IP datagram originated by a host within its domain, the BR uses the information in the datagram and the local criteria to determine whether the datagram should be forwarded along a particular SDRP route. Associated with each set of criteria is a set of one or more SDRP routes which should be used to route matching packets. The exact nature of the criteria is a local matter. The only restriction this document places on the applicability of SDRP routes is that an IP datagram that contains a strict source route should not be forwarded along an SDRP route. If the BR decides to forward the datagram along a particular SDRP route, the BR constructs the SDRP packet by placing the original datagram into the Payload field of the SDRP packet and constructing the SDRP header based on the selected SDRP route. The Next Hop pointer is set to 0 (the first entry in the Source Route field of the SDRP packet). The value of the Time To Live field in the payload header should be copied into the BR Hop Count field of the SDRP header. The source address field in the delivery header should contain an IP address of the BR. The value of the Don't Fragment flag of the delivery header is copied from the Don't Fragment flag of the payload header. The value of the Type Of Service field in the delivery header is copied from the Type Of Service field in the payload header. If the payload header contains an IP security option, that option is replicated as an option in the delivery header. All other IP options in the payload header must be ignored. If the selected SDRP route is a loose source route, then the BR consults the BGP or IDRP path table to find a path to the next hop AS. The BR chooses one such path, then selects one of the NLRI associated with this path. This prefix and its length are placed in the Prefix and Prefix Length fields of the SDRP header. If IDRP is used, then the TOS corresponding to this route is copied into the TOS field in the delivery header. Subsequent BRs will use this prefix to look up the next BGP or IDRP hop, thereby preventing hop-by-hop routing loops along the loose source route. In essence, when a BR along a loose source route selects an NLRI prefix, it is selecting a single route to the next hop AS, and forcing subsequent BR's along the path to choose the same path. Once the BGP or IDRP delivers the packet to this next-hop AS, SDRP continues forwarding it along the rest of the source route. The resulting SDRP packet is then forwarded as described in Section 5.2.2. If a BR decides to forward a datagram along a particular SDRP route, and the payload header has Don't Fragment flag set to 1, and the length of the datagram is greater than the MTU associated with the SDRP route (if the MTU is defined), the BR should generate the ICMP Destination Unreachable message with a code meaning "fragmentation needed and DF set" in accordance with ([6]). The BR should discard the original datagram. If a BR has learned an MTU for a particular SDRP route, either via ICMP messages or via configuration information, and it determines that an SDRP packet must be fragmented before transmission, then it must first fragment the payload packet using normal IP fragmentation. SDRP packets are then constructed for each fragment, as describe above. A BR may use the SDRP packets originated by the BR to verify the feasibility of its SDRP routes. To do this the BR sets the value of the Probe Indicator field in the SDRP packet to 1. Receipt of an SDRP control packet by the originating BR with the "Probe Completed" Notification Code (see Section 7.1) indicates feasibility of the SDRP route. Persistent lack of SDRP control packets with the "Probe Completed" Notification Code should be used as an indication that the associated SDRP route is unfeasible. 5 Processing SDRP packets We say that a BR receives an SDRP packet if the destination address field in the delivery header of the packet arriving at the BR contains one of the IP addresses of the BR. When a BR receives an SDRP packet, the BR extracts the Source Route Protocol field from the SDRP header. Processing of an SDRP packet with the value of the Source Route Protocol field other than 1 is outside the scope of this document. If the value of this field is 1, the BR should proceed as follows. 5.1 Supporting Transit Policies A BR may be able to verify that a packet that it is given to forward does not violate any of the transit policies, if any, of the domain to which the BR belongs. Specific verification mechanisms are a matter that is local to the BR and are outside the scope of this document. The only restriction on the verification mechanisms is that they may take into account only the contents of the SDRP header, the payload header, and transport protocol header of the payload packet. If the BR detects that the SDRP packet violates a domain's transit policy it sends back an SDRP control packet and discards the violating packet. SDRP control packets are not subject to transit policies. If a BR does not discard an SDRP packet due to a transit policy violation, then the BR attempts to forward it as specified in Section 5.2. With SDRP a domain may enforce its transit policies by applying filters based on the information present in the IP Header. For example a BR may initially filter out all SDRP traffic from all possible sources. A filter that allows certain SDRP traffic from selected sources to pass through the BR could then be installed dynamically as a result of a local check on a packet. Once a packet passes the check against local transit policies, the appropriate filter is installed into the forwarding database to allow subsequent packets to pass through. Thus, by caching appropriate filtering information, a transit domain can efficiently enforce transit policies. Other transit policy enforcement mechanisms and implementation techniques are not precluded by this document. 5.2 Forwarding SDRP packets Procedures for forwarding of an SDRP packet depend on whether the BR has the routing information needed to forward the packet; whether the SDRP route has been completely traversed or not; whether the SDRP route is strict or loose, and whether the packet is data or control. When forwarding an SDRP packet (either data or control) a BR should not modify the following fields in the delivery header: Source Address Don't Fragment flag 5.2.1 Forwarding algorithm pseudo-code The following pseudo-code gives an overview of the SDRP forwarding algorithm. Please consult the text below for more details. Let LOCAL_DI be the DI of the domain of the local system, NEXT_DI be the next DI in the source route (or undefined if the source route has been completed), and let NEXT_HOP be the IP address of the next hop BR (as found in the D-FIB) if the packet is forwarded using SDRP. We say that NEXT_DI is adjacent if the local domain is adjacent to the domain that has NEXT_DI as its DI. Normal IP forwarding refers to forwarding that can be accomplished using FIBs constructed via BGP, IDRP or one or more IGPs. if the packet is a control packet begin if the Target Border Router equals an address assigned to the local BR begin remove the delivery header process information carried in the control packet return else if the packet can be forwarded using normal IP forwarding begin set Next Domain Pointer to Source Route Length forward the packet using normal IP forwarding return end if end if end if if the version field is not 1 begin if the packet is a data packet begin generate a control packet with "Unimplemented SDRP version" end if discard the packet return end if if the packet is a data packet begin decrement the BR Hop Count field if the BR Hop Count field is 0 begin generate a control packet with "BR Hop Count Exceeded" discard the data packet return end if if the packet violates transit policy begin generate a control packet with "Transit Policy Violation" discard the data packet return end if end if if the source route has not been completed begin while the NEXT_DI is equal to the LOCAL_DI begin update the value of the Next Domain Pointer field set NEXT_DI to the next DI in the source route if the source route is loose and NEXT_DI is not equal to the LOCAL_DI begin select a BGP or IDRP route with a path that includes NEXT_DI copy the NLRI from the route to the Prefix Length and Prefix if it was an IDRP route, set appropriate TOS in delivery header end if end while end if if the source route has not been completed begin if there is no route to NEXT_DI begin if the packet is a data packet begin generate a control packet with "No Route Available" end if discard the packet return end if if the source route is strict and NEXT_DI is not adjacent begin generate a control packet with "Strict Source Route Failed" discard the packet return end if if the source route is loose begin select the routing infomation matching the Prefix field if the routing information was an aggregate formed locally begin select a BGP or IDRP route with a path that includes NEXT_DI copy the NLRI from the route to the Prefix Length and Prefix if it was an IDRP route, set appropriate TOS in delivery header end if end if set NEXT_HOP from the routing information for NEXT_DI route packet to NEXT_HOP using normal IP forwarding else if the packet is a data packet begin remove the delivery header and the SDRP Header if there is no normal IP route to the payload destination begin generate a control packet with "No Route Available" discard the packet return end if forward the payload using normal IP forwarding if the probe bit is set begin generate a control packet with "Probe Completed" end if else discard the control packet end if end if 5.2.2 Handling an SDRP control packet. An SDRP control packet is indicated by 0 in the Data packet/Control packet bit in the Flags field in the SDRP Header. If the Target Border Router field of the received SDRP packet contains an IP address that is assigned to an interface attached to the local system, then the local system should use the information carried in the Notification Code field, the Source Route Identifier field and the information carried in the Payload field to update the status of its SDRP routes. Details of such procedures are described in Section 7. Otherwise, the local systems checks whether it can forward the packet to the BR specified in the Target Border Router field by using the routing information present in its local FIB. If forwarding is possible then the local system sets the destination address of the delivery header to the address specified in the Target Border Router field, and hands the packet off for normal IP forwarding. If normal IP forwarding is impossible then the packet may be forwarded in the same manner as an SDRP data packet (described below) but with the following exceptions. Control packets do not carry a BR Hop Count, which is neither referenced nor decremented when forwarding. Control packets are not subject to transit policies. If the version field of a control packet is not understood, no control packet should be generated. If the source route is complete and the packet still cannot be forwarded via normal IP routing, the packet should be dropped. 5.2.3 Handling an SDRP data packet. An SDRP data packet is indicated by a one in the Data packet/Control packet bit in the Flags field in the SDRP Header. An SDRP data packet is forwarded by sending the packet along the source route in the SDRP Header. When the source route is complete, the payload may be removed from the data packet and forwarded normally. Further details are described below. 5.2.3 Checking the SDRP version number An SDRP packet that has a version number other than 1 should be discarded. If the SDRP packet was a data packet, then a control packet with the Notification Code "Unimplemented SDRP version" should be generated as specified in section 6. 5.2.4 Decrementing and checking BR Hop Count If an SDRP data packet is to be forwarded, the BR Hop Count field should be decremented. If the resulting value is zero, then a control packet with the Notification Code "BR Hop Count Exceeded" should be generated as specified in section 6, and the packet should be discarded. The payload of the control packet should carry the payload header followed by 64 bits of the payload data of the data packet. 5.2.5 Enforcing transit policies A BR may examine any data packet to verify if it complies with local transit policies, as described in section 5.1. If the verification fails, the BR generates a control packet. If the verification referred to only the contents of the SDRP header, then the payload field of the control packet should be empty. If the verification referred to both the contents of the SDRP header and the payload header, then the payload field of the control packet should carry the payload header. If the verification referred to transport protocol header, then the payload field of the control packet should carry the payload header and the transport header. The Notification Code field of the SDRP header in the control packet is set to Transit Policy Violation. The procedures for constructing the rest of the SDRP Header of the control packet are specified in Section 6. 5.2.6 Incomplete source routes If a BR receives an SDRP packet with an incomplete source route, the BR extracts the DI of the next domain from the Source Route field. The BR locates the high-order byte of the appropriate DI by using the Next Domain Pointer field as an offset relative to the start of the Source Route field. If the extracted DI of the next domain is the same as the DI of the local domain, then the Next Domain Pointer should be incremented by two (the size of a DI). If the source route is still incomplete, then this procedure should be repeated until either the source route is complete, or the extracted DI is not the same as the DI of the local system. If upon the termination of the procedure the source route becomes complete, see section 5.2.9. If the Next Domain Pointer has been advanced as a result of this section, then the BR must consult its D-FIB and select a route with a path which includes the extracted DI. The NLRI for this route should be copied into the Prefix Length and Prefix fields. Otherwise, the local BR proceeds as follows. 5.2.6.1 Finding a route to the next domain Given the DI of the next domain, the BR next consults its D-FIB. If the source route is loose, then the BR should use the information carried in the Prefix and Prefix Length as an index into its BGP or IDRP routing table. If it finds a matching route then it must select the corresponding D-FIB entry. If the route was formed locally by aggregation, then the BR must consult its D-FIB and select any route with a path which includes the extracted DI. The NLRI for this route should be copied into the Prefix Length and Prefix fields. Otherwise, if no entry exists in the D-FIB for the next domain, then the packet should be discarded. If the packet was a data packet, a control message with Notification Code "No Route Available" should be generated as specified in Section 6. No other actions are necessary. If there is a D-FIB entry, the BR next examines the packet to determine if the packet specified a strict source route. If so, and the next domain is not adjacent to the local domain, then a control packet with the Notification Code "Strict Source Route Failed" should be generated as specified in section 6 and the original packet should be discarded. No other actions are necessary. The D-FIB entry includes the IP address of the next SDRP-speaking BR to which the SDRP packet should be routed. The destination address in the delivery header is replaced by this address. The resulting packet can then be forwarded using normal IP forwarding. 5.2.6.2 Last Hop Optimization A small optimization can be performed if there is only a single DI in the source route that has not been traversed. In this case, if there is a route in the FIB for the destination address of the payload packet, and the next DI in the source route indicates an adjacent domain, and the FIB route passes through this domain, then the source route may be considered complete and processing may proceed as in section 5.2.7. 5.2.7 Completed source routes If the SDRP packet received by a BR with a completed source route is a control packet and if the Target Border Router field carries an IP address assigned to the BR, then the packet should be processed as specified in Section 7. Otherwise, if the SDRP packet is a control packet, and the packet cannot be forwarded via either SDRP or normal IP forwarding and the packet should be dropped. If the packet is an SDRP data packet received by a BR, then the payload packet may be extracted from the SDRP packet. The BR Hop Count field should be copied from the SDRP header into the IP TTL field in the payload header. The resulting payload packet is then forwarded using normal IP forwarding. If there is no FIB entry for the destination, then the packet should be discarded and a control message with Notification Code "No Route Available" should be generated as specified in Section 6. If the packet can be forwarded and if the Probe Indication bit is set to one in the SDRP header, then a control message with Notification Code "Probe Completed" should be generated as specified in section 6. The payload of the control packet should carry the first 64 bits of the SDRP header and the payload header. 6 Originating SDRP control packets A BR sends a control packet in response to either error conditions, or to successful completion of a probe request (indicated via Probe Indication in the Flags field). The Data Packet/Control Packet field is set to indicate Control Packet. The following fields are copied from the SDRP header of the Data packet that caused the generation of the Control packet: Loose/Strict Source Route Source Route Protocol Type Source Route Identifier Source Route Length field Payload Protocol Type A Control packet should not carry a Probe Indication field. The Target Border Router is copied from the source IP address of the delivery header of the SDRP Data packet. The BR generating a control packet checks its FIB for a route to the destination depicted by the Target Border Router field. If such a route is present, then the value of the Destination Address field in the delivery header is set to the Target Border Router, the Source Address field in the delivery header is set to the IP address of one of the interfaces attached to the local system, and the packet is forwarded via normal IP forwarding. If the FIB does not have a route to the destination depicted by the Target Border Router field, the local system constructs the Source Route field of the Control packet by reversing the SDRP route carried in the Source Route field of the Data packet, sets the value of the Next Hop Pointer to the value of the Source Route Length field minus the value of the Next Hop Pointer field of the SDRP data packet that caused generation of the Control Packet. The contents of the Payload field depends on the reason for generating a control packet. The resulting packet is then handled via SDRP Forwarding procedures described in Section 5.2. 7. Processing control information A BR participating in SDRP may receive control information in two forms, SDRP control packets from other BRs and ICMP messages from routers that do not participate in SDRP, but are involved in forwarding SDRP packets. 7.1 Processing SDRP control packets If after processing an SDRP control packet a BR determines that the packet carries information about SDRP routes used by the BR, the BR may use the information in the SDRP control packet to select alternate routes if available and to mark the affected routes as unfeasible. To correlate information carried in the SDRP control packet with the SDRP routes used by the BR, the BR uses information carried in the SDRP header of the control packet and optionally in the SDRP payload of the control packet (if present). In general receipt of any SDRP control packet that carries one of the following Notification Codes No Route Available Strict Source Route Failed Unimplemented SDRP version indicates that the corresponding SDRP route is presently not feasible and thus should not be used for packet forwarding. The BR may at some later point attempt to use an SDRP route that was marked as infeasible. Receipt of an SDRP control packet that carries the "Transit Policy Violation" Notification Code shall be interpreted as follows: If the control packet carries no payload data then the corresponding SDRP route violates transit policy regardless of the content of the payload packet carried along that route. If the control packet carries only the payload header, then the corresponding SDRP route violates transit policy due to the content of the payload header. If the control packet carries the payload header and the transport header, then the corresponding SDRP route violates transit policy for a particular combination of the contents of the payload and transport headers. Receipt of an SDRP control packet that carries "Probe Completed" Notification Code indicates that the corresponding SDRP route is feasible. If a BR receives an SDRP control packet that carries "BR Hop Count Exceeded" Notification Code, the BR should use the information in the payload of the Control packet to construct an ICMP Time Exceeded Message with code "time to live exceeded in transit" and send the message to the host indicated by the source address in the Payload Header. 7.2 Processing ICMP messages To correlate information carried in the ICMP messages with the SDRP routes used by the BR, the BR uses the last 4 octets of the ICMP message. These bytes carry the Source Route Identifier of the SDRP route used by the BR. ICMP Destination Unreachable messages with a code meaning "fragmentation needed and DF set" should be used for SDRP MTU discovery as described in Section 9. All other ICMP Unreachable messages indicate that the associated route is infeasible. 8. Constructing D-FIBs. A BR constructs its D-FIB as a result of participating in either BGP or IDRP. A BR must advertise via BGP or IDRP a route to destinations within its domain to all of its external peers (BRs in adjacent domains). A BR may also advertise (via BGP or IDRP) to its external peers routes to destinations within other domains, but are installed in the BR's D-FIB. If a BR receives a route to an adjacent domain from a BR in that domain and selects that route as part of its BGP or IDRP Decision Process, then it must propagate this route (via BGP or IDRP) to all other BRs within its domain. A BR may also propagate such a route if it depicts an autonomous system other than the adjacent domain. 9. SDRP MTU Discovery To participate in Path MTU Discovery ([6]) a BR may maintain information about the maximum length of the payload packet that can be carried without fragmentation along a particular SDRP route. SDRP provides two complimentary techniques to support MTU Discovery. The first one is passive and is based on the receipt of the ICMP Destination Unreachable messages (as described in Section 7.2). By combining information provided in the ICMP message with local information about the SDRP route the local system can determine the length of a payload packet that would require fragmentation. The second one is active and employs the Probe Indicator bit. If an SDRP data packet that carries the Probe Indicator bit in the SDRP header and Don't Fragment flag in the delivery header triggers the last BR on the SDRP route to return an SDRP Control packet (with the Notification Code "Probe Completed"), then the information carried in the payload header of the control packet can be used to determine the length of the payload packet that went through the SDRP route without fragmentation. References [1] Lougheed, K., and Y. Rekhter, "A Border Gateway Protocol 3 (BGP- 3), RFC 1267, cisco Systems, T.J. Watson Research Center, IBM Corp., October 1991. [2] Rekhter, Y., and P. Gross, "Application of the Border Gateway Protocol in the Internet", RFC 1268, T.J. Watson Research Center, IBM Corp., ANS, October 1991. [3] Y. Rekhter and T. Li, "A Border Gateway Protocol 4 (BGP-4)", Internet Draft, cisco Systems, T.J. Watson Research Center, IBM Corp., September 1992. [4] S. Hares, "IDRP for IP", Internet Draft, NSFNET/MERIT, June 1992 [5] Postel, J., "Internet Protocol - DARPA Internet Program Protocol Specification", RFC 791, DARPA, September 1981. [6] J. Mogul, S., and S. Deering, "Path MTU Discovery", RFC1191, November 1990